<template>
	<view class="searchLayout">
		<view class="search">
			<uni-search-bar 
				@confirm="onSearch"
				@cancel="onClear"
				@clear="onClear"
				focus 
				placeholder="搜索"
				v-model="queryParams.keyword">
			</uni-search-bar>
		</view>
		
		
		<view v-if="!classList.length">
			<view class="history" v-if="historySearch.length">
				<view class="topTitle">
					<view class="text">最近搜索</view>
					<view class="icon" @click="removeHistory">
						<uni-icons type="trash" size="25"></uni-icons>
					</view>
				</view>
				<view class="tabs">
					<view class="tab" v-for="tab in historySearch" :key="tab" @click="clickTab(tab)">{{tab}}</view>		
				</view>
			</view>
			
			<view class="recommend">
				<view class="topTitle">
					<view class="text">热门搜索</view>				
				</view>
				<view class="tabs">				
					<view class="tab" v-for="tab in recommendList" :key="tab" @click="clickTab(tab)">{{tab}}</view>
				</view>
			</view>
		</view>
		
		
		<view class="noSearch" v-if="!classList.length">
			<uv-empty mode="search" icon="https://i.111666.best/image/dXptpG4Kc8ARWrQagyEXbP.png"></uv-empty>
		</view>
		
		
		<view>
			<view class="list">
				<view  class="item" v-for="(item, index) in classList" :key="item._id" @click="gotoPreview(index, item)">				
					<image :src="item.smallPicurl" mode="aspectFill"></image>				
				</view>
			</view>		
			<view v-if="noData || classList.length"><uni-load-more :status="noData?'noMore':'loading'"/></view>
		</view>
		
		
	</view>
</template>

<script setup>
import { ref, computed } from "vue";
import { onLoad, onUnload, onReachBottom } from "@dcloudio/uni-app";
import { getSearchAPI } from "@/api/index.js"
import { useClassListStore } from "@/stores/class-list.js"

const classListStore = useClassListStore();
// 查询参数
const queryParams = ref({	
	pageNum:1,
	pageSize:12,
	keyword:""
})

// 搜索历史词
const historySearch = ref([]);
if(uni.getStorageSync("historySearch")){
	historySearch.value = uni.getStorageSync("historySearch");
}
 
// 热门搜索词
const recommendList = ref(["美女","帅哥","宠物","卡通"]);

// 没有更多
const noData = ref(false);
const total = ref(0)
// 没有搜索结果
const noSearch = ref(false);

// 搜索结果列表
const classList = ref([]);


// 搜索
const onSearch = async () => {
	initParams()
	if(!queryParams.value.keyword) return;
	historySearch.value = [...new Set([queryParams.value.keyword,...historySearch.value])].splice(0, 10);
	uni.setStorageSync("historySearch", historySearch.value)
	uni.showLoading({ title: "加载中" })
	await searchData()
	uni.hideLoading()
}
const searchData = async () => {
	const res = await getSearchAPI(queryParams.value)
	total.value = res.total
	classList.value = classList.value.concat(res.data)
	if(res.data.length < queryParams.value.pageSize){
		noData.value = true
	}
	console.log(res);
}

// 清除
const onClear = ()=>{
	initParams()
}

const initParams = () => {
	queryParams.value.pageNum = 1
	classList.value = []
	noData.value = false
	noSearch.value = false
}

//点击标签进行搜索
const clickTab = (value)=>{
	initParams()
	queryParams.value.keyword = value
	onSearch()
}


//点击清空搜索记录
const removeHistory = ()=>{
	uni.showModal({
		title:"是否清空历史搜索？",
		success:res=>{
			if(res.confirm){
				historySearch.value = [];
				uni.setStorageSync("historySearch", historySearch.value)
			}
		}
	})
}

// 跳转预览
const gotoPreview = (index, item) => {
	classList.value.map(item => {
		item.className = item.classname
		item.picUrl = item.smallPicurl.replace("_small.webp", ".jpg")
	})
	classListStore.classList = classList.value
	uni.navigateTo({ url: `/pages/preview/preview?index=${index}&id=${item._id}&classname=${item.classname}` })
}

//触底加载更多
onReachBottom(async () => {
	if(classList.value.length >= total.value ) return;
	queryParams.value.pageNum++
	await searchData()
})

//关闭有页面
onUnload(()=>{
	
})


</script>

<style lang="scss" scoped>
.searchLayout {
	.search {
		padding:0 10rpx;
	}
	.topTitle {
		display: flex;
		justify-content: space-between;
		align-items: center;
		font-size: 32rpx;
		color:#999;
	}
	.history {
		padding:30rpx;		
	}
	.recommend {
		padding:30rpx;
	}
	.tabs {
		display: flex;		
		align-items: center;
		flex-wrap: wrap;
		padding-top:20rpx;
		.tab{
			background: #F4F4F4;
			font-size: 28rpx;
			color:#333;
			padding:10rpx 28rpx;
			border-radius: 50rpx;
			margin-right: 20rpx;
			margin-top: 20rpx;
		}
	}	
	.list {
		display: grid;
		grid-template-columns: repeat(3,1fr);
		gap: 5rpx;
		padding:20rpx 5rpx;		
		.item {
			height: 440rpx;
			image{
				width: 100%;
				height: 100%;
				display: block;
			}			
		}		
	}
}
</style>

